package com.qf.service.impl;

import com.qf.dao.UserDao;
import com.qf.dao.impl.UserDaoImpl;
import com.qf.pojo.User;
import com.qf.responsedata.ResponseResult;
import com.qf.service.UserService;
import com.qf.utils.MailUtils;

import java.sql.SQLException;

/**
 * @author 高圆圆
 * @date 2023/4/18 19:59
 * 针对用户的业务接口实现
 */
public class UserServiceImpl  implements UserService {
    /**
     * 通过用户名查询用户是否存在
     * @param username 用户名
     * @return 如果数据存在或者不存在,返回自定义实体对象,设置对应的属性值
     */
    @Override
    public ResponseResult getUser(String username) {
        ResponseResult  rr = null ;
        try {
            //访问数据库:调用UserDao
            UserDao ud = new UserDaoImpl() ;
            User user = ud.selectUserByUsername(username);
            //创建自定义响应实体对象
            rr = new ResponseResult() ;
            //如果user是null,没有查到,可以注册
            if(user==null){
                //封装数据
                rr.setCode(0) ;
                rr.setData(null);
                rr.setMsg("恭喜您,可用");
            }else{
                rr.setCode(1);
                rr.setData(null);
                rr.setMsg("用户名太受欢迎了,请更换!");
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return rr;
    }

    /**
     * 添加用户
     * @param user 用户实体
     */
    @Override
    public void addUser(User user) {
        try {
            //调用UserDao
            UserDao userDao = new UserDaoImpl() ;
            userDao.insertUser(user) ;//插入数据

            //给注册邮箱上发送一份邮件:需要正文---超链接
            String content = "欢迎注册,请<a href='http://localhost:8080/Maven_2302_war/user?methodName=activeUser&code="+user.getCode()+"'>点击激活</a>" ;//邮件正文呢哦让
            MailUtils.sendMail(user.getEmail(),content,"用户邮件激活") ;

        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }

    /**
     * 通过激活码获取用户
     * @param code 用户的激活码
     * @return 返回用户实体
     */
    @Override
    public User getUserByCode(String code) {
        try {
            //访问数据接口
            UserDao userDao = new UserDaoImpl() ;
            User user = userDao.selectUserByCode(code) ;
            //逻辑判断
            if(user==null){
                return  null ;
            }else{
                //存在
                //更新用户的激活状态
                user.setState(1) ;
                //更新数据库---调用数据访问接口
                userDao.updateUserState(user)  ;
                return  user ;
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    /**
     * 获取用户实体 ,通过用户名和密码
     * @param username 用户名
     * @param password 密码
     * @return  返回用户实体
     */
    @Override
    public User getUseByUserNameAndPwd(String username, String password) {
        try {
            //访问数据接口
            UserDao userDao = new UserDaoImpl() ;
            User user = userDao.selectUserByUsername(username) ;
            if(user!=null){
                //判断
                if(user.getPassword().equals(password)){
                    return  user ;
                }
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }
}
